package table;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

import controle.dao.cadastro.socio.Socio;

public class ClienteTableModel extends AbstractTableModel {
    
	 private ArrayList<Socio> linhas;  
	    private String[] colunas = new String[] { "CODIGO", "NOME", "RG", "CPF", "TELEFONE", "AVALIACAO" };  
	  
	    public ClienteTableModel() {  
	        linhas = new ArrayList<Socio>();  
	    }  
	  
	    public ClienteTableModel(ArrayList<Socio> lista) {  
	        linhas = new ArrayList<Socio>(lista);  
	    }  
	  
	    /* Retorna a quantidade de colunas. */  
	    public int getColumnCount() {  
	        // Está retornando o tamanho do array "colunas".  
	        return colunas.length;  
	    }  
	  
	    /* Retorna o nome da coluna no índice especificado. 
	     * Este método é usado pela JTable para saber o texto do cabeçalho. */  
	    @Override  
	    public String getColumnName(int columnIndex) {  
	        // Retorna o conteúdo do Array que possui o nome das colunas  
	        // no índice especificado.  
	        return colunas[columnIndex];  
	    }  
	      
	    /* Retorna a classe dos elementos da coluna especificada. 
	     * Este método é usado pela JTable na hora de definir o editor da célula. */  
	    @Override  
	    public Class<?> getColumnClass(int columnIndex) {  
	        return String.class;  
	    }  
	      
	    /* Retorna a quantidade de linhas. */  
	    public int getRowCount() {  
	        // Retorna o tamanho da lista de Clientes.  
	        return linhas.size();  
	    }  
	      
	    /* Retorna o valor da celula especificada pelos indices da   
	     * linha e da coluna.*/  
	    public Object getValueAt(int rowIndex, int columnIndex) {  
	        Socio socio = linhas.get(rowIndex);  
	  
	        // Retorna o campo referente a coluna especificada.  
	        // Aqui é feito um switch para verificar qual é a coluna  
	        // e retornar o campo adequado. As colunas são as mesmas  
	        // que foram especificadas no array "colunas".  
	        switch (columnIndex) {  
	        case 0: // Primeira coluna é o codigo.  
	            return socio.getCpf();  
	        case 1: // Segunda coluna é o nome.  
	            return socio.getRg();  
	       
	       
	        default:  
	            // Se o índice da coluna não for válido, lança um  
	            // IndexOutOfBoundsException (Exceção de índice fora dos limites).  
	            // Não foi necessário verificar se o índice da linha é inválido,  
	            // pois o próprio ArrayList lança a exceção caso seja inválido.  
	            throw new IndexOutOfBoundsException("columnIndex out of bounds");  
	        }  
	    }  
	  
	    @Override  
	    public void setValueAt(Object aValue, int rowIndex, int columnIndex){  
	        //pega o produto da linha  
	        Socio socio = linhas.get(rowIndex);  
	          
	        //verifica qual valor vai ser alterado  
	        switch (columnIndex) {  
	        case 0: // Primeira coluna é o codigo.  
	            socio.setCpf(Integer.parseInt(aValue.toString()));  
	        case 1: // Segunda coluna é o nome.  
	            socio.setRg(Integer.parseInt(aValue.toString()));  
	        
	        }  
	          
	        //avisa que os dados mudaram  
	        fireTableDataChanged();  
	    }  
	      
	    @Override  
	    public boolean isCellEditable(int rowIndex, int columnIndex) {  
	        //no nosso caso todas vão ser editáveis, entao retorna true pra todas  
	        return true;  
	    }  
	  
	      
	    public void setLinhas(ArrayList<Socio> linhas) {  
	        this.linhas = linhas;  
	    }     
}
